home *** CD-ROM | disk | FTP | other *** search
/ IRIX Base Documentation 1998 November / IRIX 6.5.2 Base Documentation November 1998.img / usr / share / catman / g_man / cat3 / OpenGL-ftn / fglpolygonoffsetext.z / fglpolygonoffsetext
Text File  |  1998-10-20  |  10KB  |  133 lines

  1.  
  2.  
  3.  
  4. ffffggggllllPPPPoooollllyyyyggggoooonnnnOOOOffffffffsssseeeettttEEEEXXXXTTTT((((3333GGGG))))        OOOOppppeeeennnnGGGGLLLL RRRReeeeffffeeeerrrreeeennnncccceeee        ffffggggllllPPPPoooollllyyyyggggoooonnnnOOOOffffffffsssseeeettttEEEEXXXXTTTT((((3333GGGG))))
  5.  
  6.  
  7.  
  8. NNNNAAAAMMMMEEEE
  9.      ffffggggllllPPPPoooollllyyyyggggoooonnnnOOOOffffffffsssseeeettttEEEEXXXXTTTT - set parameters used to offset polygon depth
  10.  
  11.  
  12. FFFFOOOORRRRTTTTRRRRAAAANNNN SSSSPPPPEEEECCCCIIIIFFFFIIIICCCCAAAATTTTIIIIOOOONNNN
  13.      SUBROUTINE ffffggggllllPPPPoooollllyyyyggggoooonnnnOOOOffffffffsssseeeettttEEEEXXXXTTTT( REAL*4 _f_a_c_t_o_r,
  14.                                      REAL*4 _b_i_a_s )
  15.  
  16.  
  17. PPPPAAAARRRRAAAAMMMMEEEETTTTEEEERRRRSSSS
  18.      _f_a_c_t_o_r  specifies a slope scale factor.
  19.  
  20.      _b_i_a_s    specifies a constant bias.
  21.              The depth values for each subsequent polygon rendered in GGGGLLLL____FFFFIIIILLLLLLLL
  22.              mode will be offset by the the slope scale factor times the
  23.              maximum absolute depth slope of the polygon, plus the bias.
  24.  
  25. DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
  26.      When GGGGLLLL____PPPPOOOOLLLLYYYYGGGGOOOONNNN____OOOOFFFFFFFFSSSSEEEETTTT____EEEEXXXXTTTT is enabled, the depth value of each pixel
  27.      fragment generated for a polygon rendered in GGGGLLLL____FFFFIIIILLLLLLLL mode is offset by an
  28.      amount that depends on the maximum absolute depth slope of the polygon.
  29.      This is useful for rendering hidden line images, for applying decals to
  30.      surfaces, and for rendering solids with highlighted edges.
  31.  
  32.      For example, an application might attempt to highlight the edges of a
  33.      polygon by drawing the polygon with mode GGGGLLLL____FFFFIIIILLLLLLLL and then drawing the
  34.      polygon again in a different color with mode GGGGLLLL____LLLLIIIINNNNEEEE.  However, because
  35.      of differences in the way lines and polygons are rasterized, the depth
  36.      values generated for pixels on a line between two vertices are usually
  37.      not the same as the depth values generated for a polygon edge between the
  38.      same two vertices.  The result is ``stitching'' or other objectionable
  39.      rendering artifacts along the edges.  This can be eliminated by adding an
  40.      appropriate offset to the depth values so that the filled part of the
  41.      polygon is cleanly separated from the highlighted edges.
  42.  
  43.      At first glance it might appear sufficient to adjust the polygon depth by
  44.      a constant amount.  However, it turns out that there is no single
  45.      constant offset that works for all the polygons in a scene.  The reason
  46.      is that the depth value at a given pixel may be derived from a polygon
  47.      sample point nearly one full pixel away from the mathematically-precise
  48.      edge of the polygon.  Therefore, the correct offset must be at least as
  49.      large as the maximum absolute change in depth for any one-pixel step on
  50.      the face of the polygon. In the following discussion, let dz represent
  51.      this change in depth.
  52.  
  53.      In the example above, the width of the lines used to highlight the
  54.      polygon edges was not specified.  If the width was one, then the analysis
  55.      in the previous paragraph shows that an offset equal to dz is sufficient
  56.      to keep the line and the polygon edge separated.  However, if the width
  57.      was two, then it would be necessary to offset at least twice as much as
  58.      dz.  Therefore, the correct offset must be a multiple of dz, where the
  59.      scale factor is a function of the width of the highlight line.
  60.  
  61.  
  62.  
  63.                                                                         PPPPaaaaggggeeee 1111
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70. ffffggggllllPPPPoooollllyyyyggggoooonnnnOOOOffffffffsssseeeettttEEEEXXXXTTTT((((3333GGGG))))        OOOOppppeeeennnnGGGGLLLL RRRReeeeffffeeeerrrreeeennnncccceeee        ffffggggllllPPPPoooollllyyyyggggoooonnnnOOOOffffffffsssseeeettttEEEEXXXXTTTT((((3333GGGG))))
  71.  
  72.  
  73.  
  74.      However, even this is not sufficient.  If a polygon is at a constant
  75.      depth, then dz is zero, so an additional bias is required to ensure that
  76.      the highlight lines and the underlying polygon remain separated in that
  77.      case.
  78.  
  79.      ffffggggllllPPPPoooollllyyyyggggoooonnnnOOOOffffffffsssseeeettttEEEEXXXXTTTT allows the application to define the proper scale
  80.      factor (_f_a_c_t_o_r) and additional bias (_b_i_a_s).  The value of the offset
  81.      derived from these parameters is _f_a_c_t_o_r * dz + _b_i_a_s, where the GL
  82.      computes dz automatically for each polygon.
  83.  
  84.      Initially GGGGLLLL____PPPPOOOOLLLLYYYYGGGGOOOONNNN____OOOOFFFFFFFFSSSSEEEETTTT____FFFFAAAACCCCTTTTOOOORRRR____EEEEXXXXTTTT (the value specified by _f_a_c_t_o_r)
  85.      and GGGGLLLL____PPPPOOOOLLLLYYYYGGGGOOOONNNN____OOOOFFFFFFFFSSSSEEEETTTT____BBBBIIIIAAAASSSS____EEEEXXXXTTTT (the value specified by _b_i_a_s) are both set
  86.      to 0.0.
  87.  
  88. NNNNOOOOTTTTEEEESSSS
  89.      Since _f_a_c_t_o_r is always used to scale dz, it can be chosen without regard
  90.      for the precision with which depth values are represented in the graphics
  91.      system.  However, if the value chosen for _b_i_a_s is smaller than the
  92.      minimum representable difference in depth values, it will have no effect.
  93.      This minimum representable difference varies not only with the size of
  94.      the depth buffer, but also with other implementation-dependent
  95.      parameters, such as the number of guard bits that are used to prevent
  96.      overflow during rasterization.  0.00002 (somewhat larger than 1 / 2**16)
  97.      should be adequate for most systems, but may be so large that it causes
  98.      depth buffering artifacts on others.  0.000001 (somewhat larger than
  99.      1 / 2**20) might be a reasonable choice on systems with 24-bit depth
  100.      buffers.
  101.  
  102.      ffffggggllllPPPPoooollllyyyyggggoooonnnnOOOOffffffffsssseeeettttEEEEXXXXTTTT is part of the EEEEXXXXTTTT____ppppoooollllyyyyggggoooonnnn____ooooffffffffsssseeeetttt extension, not part
  103.      of the core GL command set.  If GGGGLLLL____EEEEXXXXTTTT____ppppoooollllyyyyggggoooonnnn____ooooffffffffsssseeeetttt is included in the
  104.      string returned by ffffggggllllGGGGeeeettttSSSSttttrrrriiiinnnngggg, when called with argument GGGGLLLL____EEEEXXXXTTTTEEEENNNNSSSSIIIIOOOONNNNSSSS,
  105.      extension EEEEXXXXTTTT____ppppoooollllyyyyggggoooonnnn____ooooffffffffsssseeeetttt is supported by the connection.
  106.  
  107. EEEERRRRRRRROOOORRRRSSSS
  108.      GGGGLLLL____IIIINNNNVVVVAAAALLLLIIIIDDDD____OOOOPPPPEEEERRRRAAAATTTTIIIIOOOONNNN is generated if ffffggggllllPPPPoooollllyyyyggggoooonnnnOOOOffffffffsssseeeettttEEEEXXXXTTTT is executed
  109.      between the execution of ffffggggllllBBBBeeeeggggiiiinnnn and the corresponding execution of
  110.      ffffggggllllEEEEnnnndddd.
  111.  
  112. AAAASSSSSSSSOOOOCCCCIIIIAAAATTTTEEEEDDDD GGGGEEEETTTTSSSS
  113.      ffffggggllllIIIIssssEEEEnnnnaaaabbbblllleeeedddd with argument GGGGLLLL____PPPPOOOOLLLLYYYYGGGGOOOONNNN____OOOOFFFFFFFFSSSSEEEETTTT____EEEEXXXXTTTT
  114.      ffffggggllllGGGGeeeetttt with argument GGGGLLLL____PPPPOOOOLLLLYYYYGGGGOOOONNNN____OOOOFFFFFFFFSSSSEEEETTTT____FFFFAAAACCCCTTTTOOOORRRR____EEEEXXXXTTTT or
  115.      GGGGLLLL____PPPPOOOOLLLLYYYYGGGGOOOONNNN____OOOOFFFFFFFFSSSSEEEETTTT____BBBBIIIIAAAASSSS____EEEEXXXXTTTT.
  116.  
  117.  
  118. SSSSEEEEEEEE AAAALLLLSSSSOOOO
  119.      ffffggggllllDDDDeeeepppptttthhhhFFFFuuuunnnncccc, ffffggggllllDDDDiiiissssaaaabbbblllleeee, ffffggggllllEEEEnnnnaaaabbbblllleeee, ffffggggllllGGGGeeeetttt, ffffggggllllIIIIssssEEEEnnnnaaaabbbblllleeeedddd, ffffggggllllLLLLiiiinnnneeeeWWWWiiiiddddtttthhhh,
  120.      ffffggggllllRRRReeeeffffeeeerrrreeeennnncccceeeePPPPllllaaaannnneeeeSSSSGGGGIIIIXXXX, ffffggggllllSSSStttteeeennnncccciiiillllOOOOpppp, ffffggggllllTTTTeeeexxxxEEEEnnnnvvvv.
  121.  
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.                                                                         PPPPaaaaggggeeee 2222
  130.  
  131.  
  132.  
  133.